class ListNode {
  val: number;
  next: ListNode | null;
  constructor(val?: number, next?: ListNode | null) {
    this.val = val === undefined ? 0 : val;
    this.next = next === undefined ? null : next;
  }
}

/**
 * 反转一个单链表。
 *
 * @param head 可能为空的链表头节点。
 * @returns 反转后的链表头节点。
 */
let index = 0;
function reverseList(head: ListNode | null): ListNode | null {
  // 如果链表为空或只有一个节点，则不需要反转，直接返回。
  if (head === null || head.next === null) return head;
  console.log(head, index++, "@@");
  const newHead = reverseList(head.next);

  // 将当前节点的下一个节点的 next 指针指向当前节点。
  head.next.next = head;
  // 将当前节点的 next 指针置为空，避免形成环。
  head.next = null;
  console.log(head, index++, newHead, "###");

  return newHead;
}

const node = new ListNode(1);
node.next = new ListNode(2);
node.next.next = new ListNode(3);

const reverse = reverseList(node);
let current = reverse;
while (current) {
  console.log(current.val);
  current = current.next;
}

export {};
